package com.peoit.honeycomb.application;

import java.util.List;
import java.util.Map;

import com.peoit.honeycomb.domain.SmsTemplate;
import com.peoit.honeycomb.domain.User;
import com.peoit.honeycomb.domain.repository.EntityRepository;
import com.peoit.honeycomb.domain.security.Person;
import com.peoit.honeycomb.dto.UserQueryDto;
import com.peoit.honeycomb.dto.UserRealNameVerifyDto;

/**
 * Created by Bing.Zeng on 2015/9/23.
 */
public interface UserApplication extends EntityRepository {

	/**
	 * 查询分页
	 * 
	 * @param dto
	 * @return
	 */
	public List<User> findByWherePage(UserQueryDto dto);

	/**
	 * 查询所有用户的总数
	 * 
	 * @param dto
	 * @return
	 */
	public Long findUserCount(UserQueryDto dto);

	/**
	 * 分页查询等待实名认证的用户
	 * 
	 * @param dto
	 * @return
	 */
	public List<User> findAuthenWherePage(UserQueryDto dto);

	/**
	 * 分页查询已经通过实名认证的用户
	 * 
	 * @param dto
	 * @return
	 */
	public List<User> findAuthenedWherePage(UserQueryDto dto);

	/**
	 * 返回等待实名认证的用户总条数
	 * 
	 * @param dto
	 * @return
	 */
	public long findCountAuthen(UserQueryDto dto);

	/**
	 * 返回实名认证的用户总条数
	 * 
	 * @param dto
	 * @return
	 */
	public long findCountAuthened(UserQueryDto dto);

	/**
	 * 获取单个用户根据id
	 * 
	 * @param id
	 * @return
	 */
	public User getUserById(String id);

	public User updateUser(User user);

	/**
	 * 注册用户
	 *
	 * @param user
	 */
	public User register(User user);

	/**
	 * 用户登录
	 *
	 * @param userName
	 * @param password
	 * @return
	 */
	public User login(String userName, String password);

	/**
	 * 验证用户授权码
	 * 
	 * @param loginId
	 * @param authorizationCode
	 * @return
	 */
	public boolean verifyAuthorizationCode(String loginId, String authorizationCode);

	/**
	 * @param userName
	 * @return
	 */
	public boolean checkPhoneNumberExist(String userName);

	/**
	 * @param phoneNumber
	 * @return
	 */
	public boolean checkUserNameExist(String phoneNumber);

	/**
	 * 实名认证
	 * 
	 * @param dto
	 * @return
	 */
	public boolean verifyID(UserRealNameVerifyDto dto);

	/**
	 * 修改授权密码
	 * 
	 * @param id
	 * @param oldPass
	 * @param newPass
	 * @return
	 */
	public boolean changeAuthCode(String id, String oldPass, String newPass);

	/**
	 * 修改登陆密码
	 * 
	 * @param id
	 * @param oldPass
	 * @param newPass
	 * @return
	 */
	public boolean changeLoginPass(String id, String oldPass, String newPass);

	/**
	 * 重设授权密码
	 * 
	 * @param id
	 * @param newPass
	 * @return
	 */
	public boolean resetAuthCode(String id, String newPass);

	/**
	 *
	 * 重设登录密码
	 *
	 * @param id
	 * @param newPass
	 * @return
	 */
	public boolean resetLoginPass(String id, String newPass);

	/**
	 *
	 * 修改用户简介
	 *
	 * @param id
	 * @param caption
	 * @return
	 */
	public boolean changeCaption(String id, String caption);

	/**
	 *
	 * 修改用户头像
	 *
	 * @param userId
	 * @param avatarFilePath
	 * @return
	 */
	public boolean changeAvatar(String userId, String avatarFilePath);

	/**
	 *
	 * 修改用户邮件
	 *
	 * @param userId
	 * @param email
	 * @return
	 */
	public boolean changeEmail(String userId, String email);

	/**
	 *
	 * 修改用户手机号
	 *
	 * @param userId
	 * @param mobile
	 * @return
	 */
	public boolean changeMobile(String userId, String mobile);

	/**
	 * 获取用户等级
	 * 
	 * @param userId
	 * @return
	 */
	public Map<String, String> getUserLevel(String userId);

	/**
	 * 审核实名认证用户
	 * 
	 * @param userId
	 * @param passOrNot
	 * @return
	 */
	public Boolean verifyUser(String userId, Boolean passOrNot);

	/**
	 * 根据name查询用户
	 * 
	 * @param name
	 * @return
	 */
	public Person getPersonBy(String name);

	/**
	 * 验证邮箱
	 * 
	 * @param email
	 */
	public void verifyEmail(String email);

	/**
	 * 获取短信模板
	 * 
	 * @param type
	 * @return
	 */
	public SmsTemplate getSmsTemplate(String type);
}
